<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>The small3d library: changes per version</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="customdoxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="logo_s.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">The small3d library
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">changes per version </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>v1.802 (still open)</p>
<ul>
<li>I have taken the difficult decision to stop supporting Vulkan, at least for now. The small3d Vulkan renderer was initially developed years ago. The goal was to perhaps drop support for OpenGL at some point. But things did not turn out as foreseen. It has now been a long time after the initial release of the Vulkan API. While using it I have spent much time chasing down obscure driver bugs on various devices, be that mobile or older PCs. The growing criticism of the Vulkan pipeline object and the recent introduction of the VK_EXT_shader_object extension has made me realise that it will still be very long before I can safely publish anything running on Vulkan in production guaranteed to execute on hardware that is not the latest and greatest. At the same time, OpenGL and OpenGL ES still run reliably, even on Apple devices on which they are officially deprecated. So I am pulling the plug on Vulkan, at least for now. This will also decrease the complexity of small3d, allowing for more efficient maintenance and evolution in directions that matter.</li>
<li>[BREAKING] SceneObject constructors now only take Model object parameters, rather than paths to Model files.</li>
<li>[BREAKING] Model.animate method has been deleted. Added Model.getNumPoses method so that the total number of poses is known outside of Model. The Model can now be animated by specifying the current pose when calling getJointTransform (it has been added as a parameter). This allows for more flexibility. For example multiple SceneObjects can be created now by copying one to the other. They all share the same Model data, saving GPU memory, while they can each animate the Model differently when rendering it. The inconvenience of this change is that the current pose is now a parameter in all the Renderer.render functions and existing game code using small3d has to be updated, otherwise it can mix up this current pose parameter with the perspective parameter, with undesirable consequences.</li>
<li>CMakeLists.txt modernisation</li>
<li>[BREAKING] The FindSMALL3D.cmake module has been renamed to Findsmall3d and it now retrieves variables with "small3d" in lowercase, for example "small3d_LIBRARIES" instead of "SMALL3D_LIBRARIES". It also provides the small3d::small3d target which greatly diminishes the code needed in CMakeLists files using the library.</li>
<li>Reintroduced Wavefront support.</li>
<li>Model files in supported formats (glTF and Wavefront at the time of writing) can now be converted to a native <a class="el" href="namespacesmall3d.html">small3d</a> binary format, using a new format converter program produced by the project's build script, named s3dfc. The produced binary files can then be read by a new file access class called BinaryFile and loaded into Models.</li>
<li>Sound files (.ogg) can also be converted by s3dfc to native <a class="el" href="namespacesmall3d.html">small3d</a> sound files and used as such. In the case of sound files, both ogg and native binaries are just loaded by the Sound class (there is no separate loader class).</li>
<li>Multiple animations can now be loaded from .glb files and used.</li>
<li>Added FreeBSD support.</li>
<li>Added basic materials support (colour, transparency).</li>
</ul>
<p>v1.801 2023-01-21</p>
<ul>
<li>VS build scripts switched to build with VS 2022 by default. In order to go back to VS 2019 just change the VSCONFIG variables in <code>srcipts/build-vs.bat</code> and <code>deps/scripts/prepare-vs.bat</code> to <code>-G"Visual Studio 16 2019" -A x64</code></li>
<li>Stability improvements, especially for sound on Android and iOS.</li>
<li>[BREAKING] SceneObject::setRotation(mat4x4) has been renamed to setTransformation.</li>
<li>Always loading the khronos validation layer on Android, even in release builds. This is done as a workaround to a Qualcomm Adreno driver bug, which makes the vertex shader compilation crash when using Vulkan in release builds on some devices.</li>
<li>[BREAKING] Renderer::setCameraRotation(const mat4x4&amp;) has been renamed to setCameraTransformation(const mat4x4&amp;).</li>
<li>Added OpenGL ES 2.0 support for Android and iOS.</li>
<li>Added Android and iOS test projects to the repository.</li>
<li>Texture colour components are now loaded and managed as 8-bit unsigned integers.</li>
<li>On Android, using oboe for sound instead of aaudio.</li>
<li>Implemented shadow mapping.</li>
<li>Migrated conan package configuration to conan 2.0 and separated it from the main small3d repository (note: small3d is built with plain cmake - conan package manager use is optional)</li>
</ul>
<p>v1.800 2022-01-03</p>
<ul>
<li>[BREAKING] Rotations are now stored and managed as transformations. Euler angles (x, y, z rotation) support remains but with a modified interface.</li>
<li>[BREAKING] SceneObject.offset has been renamed to SceneObject.position.</li>
<li>[BREAKING] SceneObject.boundingBoxSet is now private. It is still possible to retrieve the bounding boxes as Models, using SceneObject.getBoundingBoxSetModels, and the bounding box set extremes using SceneObject.getBoundingBoxSetExtremes.</li>
<li>SceneObject.boundingBoxSet and SceneObject.models have been converted to smart pointers to allow for the copy constructor to create scene objects that reuse existing models.</li>
<li>Bounding boxes now take a scaling parameter, and the SceneObject scales the automatically generated bounding boxes to a Model's initial scale.</li>
<li>Added Model-based SceneObject constructor.</li>
<li>Maximum number of objects that can be rendered per frame is now increased automatically each time that number is exceeded.</li>
</ul>
<p>v1.709 2021-10-16</p>
<ul>
<li>Default light direction adjusted to match the perspective matrix correction of v1.708.</li>
<li>[BREAKING] Removed custom-made intToStr and floatToStr functions. Using std::to_string instead.</li>
<li>Added glTF support.</li>
<li>[BREAKING] Bounding boxes are now be generated automatically, instead of being loaded from a file.</li>
<li>[BREAKING] GetTokens is now just a private function of WavefrontFile. It cannot be used externally.</li>
<li>[BREAKING] Models are no longer loaded with filenames as parameters. The appropriate file parsing object has to be passed instead.</li>
<li>Scaling 3D models now also supported.</li>
<li>Upgraded portaudio to stable v190700.</li>
<li>Upgraded freetype to version 2.11.0.</li>
<li>[BREAKING] Removed clearScreen command. Clearing the screen now happens automatically when swapBuffers is called.</li>
</ul>
<p>v1.708 2020-12-25</p>
<ul>
<li>Elimination of compiler warnings and other code improvements.</li>
<li>Upgraded to the latest versions of glfw, glm and freetype.</li>
<li>Scripts now provided for preparing dependencies and building small3d on all supported platforms.</li>
<li>The README has been greatly shortened since a lot of the information that was there is now unnecessary. It can be found in the build scripts and it actually <em>runs</em> :)</li>
<li>My perspective matrix was (mistakenly) row-major all this time. After converting it to column-major, I decided to just use glm::perspective instead, since it is in effect the same thing and makes the code look simpler.</li>
</ul>
<p>v1.707 2020-12-01</p>
<ul>
<li>[BREAKING] Improved collision detection.</li>
<li>Merged OpenGL and Vulkan codebases. OpenGL can be optionally selected instead of Vulkan when configuring with CMake.</li>
<li>Improved dependency preparation scripts. <br  />
</li>
<li>Build scripts now provided for Android and iOS.</li>
</ul>
<p>v1.706 2020-05-21</p>
<ul>
<li>The slowdown on MacOS in full screen mode has now been corrected and full screen mode has been re-enabled on MacOS.</li>
<li>[BREAKING] Corrected coordinate system handedness (right handed implementation, emulating OpenGL).</li>
</ul>
<p>v1.705 2019-11-19</p>
<ul>
<li>Window resizing is now supported.</li>
</ul>
<p>v1.704 2019-11-06</p>
<ul>
<li>Corrections for Android and iOS</li>
</ul>
<p>v1.703 2019-11-02</p>
<ul>
<li>[BREAKING] Eliminated Renderer write function and all the renderRectangle functions as they were too resource hungry.</li>
<li>Modified Renderer generateTexture function to contain a confirmation flag for replacing an existing texture if it has the same name as the texture being generated.</li>
<li>Added some convenient render functions to Renderer, for rendering models without a given offset nor rotation (defaulting to 0).</li>
</ul>
<p>v1.702 2019-10-26</p>
<ul>
<li>Introduced noCache flag for rendered text, allowing for the enclosing texture to be replaced when a new texture is created.</li>
</ul>
<p>v1.701 2019-10-19</p>
<ul>
<li>Rationalised use of Vulkan synchronisation objects.</li>
</ul>
<p>v1.700 2019-10-10</p>
<ul>
<li>Migrated to Vulkan</li>
</ul>
<p>v1.697 2019-05-28</p>
<ul>
<li>README improvements</li>
</ul>
<p>v1.696 2019-05-26</p>
<ul>
<li>Upgraded glfw to released v3.3.</li>
</ul>
<p>v1.695 2019-04-28</p>
<ul>
<li>Stopped using Google Test.</li>
<li>Improved dependency preparation scripts.</li>
</ul>
<p>v1.694 2019-04-19</p>
<ul>
<li>Reorganisation and improvement of shader logic.</li>
</ul>
<p>v1.693 2019-03-17</p>
<ul>
<li>Corrected google test related bug in VS Debug build.</li>
</ul>
<p>v1.692 2019-01-19</p>
<ul>
<li>Removed all secure CRT functions from Visual Studio build.</li>
</ul>
<p>v1.691 2018-12-11</p>
<ul>
<li>Model now has a default constructor.</li>
</ul>
<p>v1.69 2018-12-10</p>
<ul>
<li>Now using google test v1.8.1.</li>
</ul>
<p>v1.68 2018-12-09</p>
<ul>
<li>Lower case characters like p and q were not being rendered entirely. This has now been corrected.</li>
<li>Upgraded FreeType to v2.9.1.</li>
<li>Bug fixes.</li>
</ul>
<p>v1.67 2018-11-29</p>
<ul>
<li>Added a generateTexture function to the Renderer, which creates a texture with some given text rendered within it.</li>
</ul>
<p>v1.66 2018-11-16</p>
<ul>
<li>Corrected texture mapping issue that occured when rendering textured rectangles using the perspective shaders.</li>
</ul>
<p>v1.65 2018-10-20</p>
<ul>
<li>This project is now called the small3d framework, instead of the small3d game engine.</li>
<li>Documentation reorganisation.</li>
</ul>
<p>v1.64 2018-10-18</p>
<ul>
<li>Corrected blank window issue on Mojave (when not in full screen mode, nothing was being rendered until the game window was moved).</li>
</ul>
<p>v1.63 2018-10-08</p>
<ul>
<li>No more "window not responding" messages in Linux during unit tests.</li>
<li>On MacOS, the window used during unit testing is now visible.</li>
<li>Another GLFW update.</li>
</ul>
<p>v1.62 2018-09-27</p>
<ul>
<li>Improved documentation generation procedure.</li>
<li>Using the latest GLFW snapshot on MacOS.</li>
</ul>
<p>v1.60 2018-09-15</p>
<ul>
<li>OpenGL v2.1 support dropped. small3d now only supports OpenGL v3.3 Core Profile.</li>
</ul>
<p>v1.51 2018-06-06</p>
<ul>
<li>History reset. Changes that have taken place up to this point have now endured for so long that they are considered small3d's initial state. </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
</small></address>
</body>
</html>
